SajátĂtsd el a Pandas DataFrame lĂ©trehozását. Ez az ĂştmutatĂł bemutatja az inicializálást szĂłtárakbĂłl, listákbĂłl, NumPy tömbökbĹ‘l Ă©s egyĂ©b forrásokbĂłl, adatprofiknak.
Pandas DataFrame létrehozás: Mélyreható betekintés az adatstruktúra inicializálásába
ĂśdvözöljĂĽk a Pythonnal törtĂ©nĹ‘ adatmanipuláciĂł világában! Szinte minden adatelemzĂ©si feladat közĂ©ppontjában a Pandas könyvtár áll, melynek sarokköve a DataFrame. Gondoljon egy DataFrame-re, mint egy okos, hatĂ©kony Ă©s rugalmas változatra egy táblázatkezelĹ‘nek vagy adatbázis-táblának, amely közvetlenĂĽl a Python környezetĂ©ben Ă©l. Ez az elsĹ‘dleges eszköz az adatok tisztĂtására, átalakĂtására, elemzĂ©sĂ©re Ă©s vizualizálására. MielĹ‘tt azonban bármelyik adatvarázslatot vĂ©grehajtaná, elĹ‘ször el kell sajátĂtania a DataFrame lĂ©trehozásának művĂ©szetĂ©t. Ennek az alapvetĹ‘ adatstruktĂşrának az inicializálása alapozhatja meg a teljes elemzĂ©sĂ©t.
Ez az átfogĂł ĂştmutatĂł a feltörekvĹ‘ Ă©s gyakorlĂł adatelemzĹ‘k, tudĂłsok Ă©s mĂ©rnökök globális közönsĂ©ge számára kĂ©szĂĽlt. FelfedezzĂĽk a leggyakoribb Ă©s leghatĂ©konyabb mĂłdszereket a Pandas DataFrame-ek nullárĂłl törtĂ©nĹ‘ lĂ©trehozására. FĂĽggetlenĂĽl attĂłl, hogy az adatai szĂłtárban, listában, NumPy tömbben vagy más formátumban vannak, ez a cikk biztosĂtja Ă–nnek az ismereteket Ă©s gyakorlati pĂ©ldákat a DataFrame-ek magabiztos Ă©s hatĂ©kony inicializálásához. ÉpĂtsĂĽk fel az alapokat.
Mi is pontosan a Pandas DataFrame?
MielĹ‘tt elkezdenĂ©nk az Ă©pĂtkezĂ©st, tisztázzuk, mit is Ă©pĂtĂĽnk. A Pandas DataFrame egy kĂ©tdimenziĂłs, mĂ©retileg mĂłdosĂthatĂł Ă©s potenciálisan heterogĂ©n táblázatos adatstruktĂşra. Bontsuk ezt le:
- Kétdimenziós: Sorokkal és oszlopokkal rendelkezik, akárcsak egy táblázatkezelő.
- MĂ©retileg mĂłdosĂthatĂł: Sorokat Ă©s oszlopokat adhat hozzá vagy távolĂthat el a DataFrame lĂ©trehozása után.
- HeterogĂ©n: Az oszlopok kĂĽlönbözĹ‘ adattĂpusokat tartalmazhatnak. PĂ©ldául az egyik oszlop tartalmazhat számokat (egĂ©sz vagy lebegĹ‘pontos), egy másik szöveget (stringeket), Ă©s egy harmadik dátumokat vagy logikai Ă©rtĂ©keket (Igaz/Hamis).
Egy DataFrame három fő komponenst tartalmaz:
- Az Adatok: A struktúrában tárolt tényleges értékek, sorokba és oszlopokba rendezve.
- Az Index: A sorok cĂmkĂ©i. Ha nem ad meg indexet, a Pandas alapĂ©rtelmezett, 0-tĂłl indulĂł indexet hoz lĂ©tre. Az index hatĂ©kony mĂłdot biztosĂt az adatok elĂ©rĂ©sĂ©re Ă©s illesztĂ©sĂ©re.
- Az Oszlopok: Az oszlopok cĂmkĂ©i. Ezek kulcsfontosságĂşak a DataFrame-en belĂĽli specifikus adatsorok elĂ©rĂ©sĂ©hez.
Ennek a struktúrának a megértése kulcsfontosságú ahhoz, hogy hatékonyan hozzon létre és manipuláljon DataFramer-ket.
Az Alap: A Pandas importálása
Először is. Ahhoz, hogy a Pandast használja, importálnia kell a könyvtárat a Python szkriptjébe vagy jegyzetfüzetébe. A világszerte elfogadott konvenció, amelyet a szakemberek követnek, az, hogy az pd alias-szal importálják. Ez az egyszerű alias olvashatóbbá és tömörebbé teszi a kódot.
import pandas as pd
import numpy as np # Often used alongside Pandas, so we'll import it too.
Ezzel az egyetlen sorral feloldotta a Pandas könyvtár teljes erejét. Most pedig térjünk rá ennek az útmutatónak a lényegére: a DataFrame-ek létrehozására.
Alapvető létrehozási módszerek: Egyszerűtől a komplexig
A pd.DataFrame() konstruktor hihetetlenĂĽl sokoldalĂş. Sok kĂĽlönbözĹ‘ tĂpusĂş bemenetet kĂ©pes elfogadni. Most megvizsgáljuk a leglĂ©nyegesebb mĂłdszereket, a leggyakoribbtĂłl a speciálisabb esetek felĂ© haladva.
1. DataFrame létrehozása listák vagy tömbök szótárából
Ez vitathatatlanul a leggyakoribb Ă©s legintuitĂvabb mĂłdszer egy DataFrame lĂ©trehozására. Egy Python szĂłtárral kezdĹ‘dik, ahol a kulcsok az oszlopnevek, az Ă©rtĂ©kek pedig listák (vagy NumPy tömbök vagy Pandas Series objektumok), amelyek az egyes oszlopok adatait tartalmazzák.
Hogyan működik: A Pandas minden szótárkulcsot egy oszlopfejléhez, és minden értéklistát az adott oszlop soraihoz rendel. Fontos követelmény, hogy minden lista azonos hosszúságú legyen, mivel minden lista egy teljes oszlopnyi adatot képvisel.
Példa:
Hozzon létre egy DataFrame-et, amely különböző világvárosokról tartalmaz információkat.
# Data organized by column
city_data = {
'City': ['Tokyo', 'Delhi', 'Shanghai', 'SĂŁo Paulo', 'Mumbai'],
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
# Create the DataFrame
df_from_dict = pd.DataFrame(city_data)
print(df_from_dict)
Kimenet:
City Country Population_Millions Is_Coastal
0 Tokyo Japan 37.3 True
1 Delhi India 32.0 False
2 Shanghai China 28.5 True
3 SĂŁo Paulo Brazil 22.4 False
4 Mumbai India 20.9 True
FĹ‘bb tanulság: Ez a mĂłdszer tökĂ©letes, ha az adatai termĂ©szetesen rendezettek funkciĂł vagy kategĂłria szerint. Tiszta, olvashatĂł, Ă©s közvetlenĂĽl táblázatos formátumba fordĂtja a szĂłtára struktĂşráját.
2. DataFrame létrehozása szótárak listájából
Egy alternatĂv Ă©s ugyanolyan hatĂ©kony mĂłdszer az, ha egy listát használunk, ahol minden elem egy szĂłtár. Ebben a struktĂşrában minden szĂłtár egyetlen sort kĂ©pvisel, Ă©s annak kulcsai kĂ©pviselik az adott sor adatainak oszlopneveit.
Hogyan működik: A Pandas végighalad a listán. Minden szótárhoz létrehoz egy új sort. A szótárkulcsok az oszlopok meghatározására szolgálnak. Ez a módszer hihetetlenül rugalmas, mert ha egy szótárban hiányzik egy kulcs, a Pandas automatikusan kitölti az adott cellát a megfelelő sorban NaN (Not a Number) értékkel, ami a hiányzó adatok standard jelölője a Pandasban.
Példa:
Mutassuk be ugyanazt a városadatot, de ezúttal rekordok listájaként strukturálva.
# Data organized by row (record)
records_data = [
{'City': 'Tokyo', 'Country': 'Japan', 'Population_Millions': 37.3, 'Is_Coastal': True},
{'City': 'Delhi', 'Country': 'India', 'Population_Millions': 32.0, 'Is_Coastal': False},
{'City': 'Shanghai', 'Country': 'China', 'Population_Millions': 28.5},
{'City': 'SĂŁo Paulo', 'Country': 'Brazil', 'Population_Millions': 22.4, 'Is_Coastal': False},
{'City': 'Cairo', 'Country': 'Egypt', 'Timezone': 'EET'} # Note the different structure
]
# Create the DataFrame
df_from_list_of_dicts = pd.DataFrame(records_data)
print(df_from_list_of_dicts)
Kimenet:
City Country Population_Millions Is_Coastal Timezone
0 Tokyo Japan 37.3 True NaN
1 Delhi India 32.0 False NaN
2 Shanghai China 28.5 NaN NaN
3 SĂŁo Paulo Brazil 22.4 False NaN
4 Cairo Egypt NaN NaN EET
Figyelje meg, hogy a Pandas milyen elegánsan kezelte az inkonzisztenciákat. Shanghai 'Is_Coastal' értéke NaN, mert hiányzott a szótárából. Egy új 'Timezone' oszlop jött létre Kairó számára, NaN értékkel az összes többi város esetében. Ez kiváló választássá teszi félig strukturált adatokkal való munkához, például API-kból származó JSON válaszokkal.
Főbb tanulság: Használja ezt a módszert, ha az adatai rekordok vagy megfigyelések sorozataként érkeznek. Robusztus a hiányzó adatok és a rekordstruktúra eltéréseinek kezelésében.
3. DataFrame létrehozása NumPy tömbből
Azok számára, akik tudományos számĂtástechnikával, gĂ©pi tanulással vagy bármilyen nagy számĂtási műveletekkel járĂł terĂĽlettel foglalkoznak, az adatok gyakran NumPy tömbökbĹ‘l származnak. A Pandas a NumPy-ra Ă©pĂĽl, Ăgy a kettĹ‘ közötti integráciĂł zökkenĹ‘mentes Ă©s rendkĂvĂĽl hatĂ©kony.
Hogyan működik: Egy kĂ©tdimenziĂłs NumPy tömböt ad át a pd.DataFrame() konstruktornak. AlapĂ©rtelmezĂ©s szerint a Pandas egĂ©sz szám alapĂş indexeket Ă©s oszlopokat hoz lĂ©tre. Azonban (Ă©s javasolt is) Ă©rtelmes cĂmkĂ©ket adhat meg az index Ă©s columns paramĂ©terek segĂtsĂ©gĂ©vel.
Példa:
Hozzon létre egy DataFrame-et egy véletlenszerűen generált 5x4-es NumPy tömbből, amely időbeli érzékelőméréseket képvisel.
# Create a 5x4 NumPy array with random data
data_np = np.random.rand(5, 4)
# Define column and index labels
columns = ['Sensor_A', 'Sensor_B', 'Sensor_C', 'Sensor_D']
index = pd.to_datetime(['2023-10-27 10:00', '2023-10-27 10:01', '2023-10-27 10:02', '2023-10-27 10:03', '2023-10-27 10:04'])
# Create the DataFrame
df_from_numpy = pd.DataFrame(data=data_np, index=index, columns=columns)
print(df_from_numpy)
Kimenet (az Ön véletlenszerű számai eltérhetnek):
Sensor_A Sensor_B Sensor_C Sensor_D
2023-10-27 10:00:00 0.123456 0.987654 0.555555 0.111111
2023-10-27 10:01:00 0.234567 0.876543 0.666666 0.222222
2023-10-27 10:02:00 0.345678 0.765432 0.777777 0.333333
2023-10-27 10:03:00 0.456789 0.654321 0.888888 0.444444
2023-10-27 10:04:00 0.567890 0.543210 0.999999 0.555555
Ebben a példában egy hatékony funkciót is bemutattunk: a DatetimeIndex használatát idősoros adatokhoz, ami a Pandasban az idő alapú elemzési képességek széles skáláját tárja fel.
Főbb tanulság: Ez a legmemória-hatékonyabb módszer egy DataFrame létrehozására homogén numerikus adatokból. Ez a standard választás, amikor olyan könyvtárakkal dolgozunk, mint a NumPy, Scikit-learn vagy TensorFlow.
4. DataFrame létrehozása listák listájából
Ez a módszer koncepcionálisan hasonló a NumPy tömbből történő létrehozáshoz, de standard Python listákat használ. Ez egy egyszerű módja a beágyazott lista formátumban tárolt táblázatos adatok konvertálásának.
Hogyan működik: Adjon meg egy listát, ahol minden belső lista egy adatsort képvisel. Mint a NumPy tömbök esetében, erősen ajánlott az oszlopnevek megadása a columns paraméteren keresztül az áttekinthetőség érdekében.
Példa:
# Data as a list of rows
product_data = [
['P001', 'Laptop', 1200.00, 'Electronics'],
['P002', 'Mouse', 25.50, 'Electronics'],
['P003', 'Desk Chair', 150.75, 'Furniture'],
['P004', 'Keyboard', 75.00, 'Electronics']
]
# Define column names
column_names = ['ProductID', 'ProductName', 'Price_USD', 'Category']
# Create the DataFrame
df_from_list_of_lists = pd.DataFrame(product_data, columns=column_names)
print(df_from_list_of_lists)
Kimenet:
ProductID ProductName Price_USD Category 0 P001 Laptop 1200.00 Electronics 1 P002 Mouse 25.50 Electronics 2 P003 Desk Chair 150.75 Furniture 3 P004 Keyboard 75.00 Electronics
Főbb tanulság: Ez egy egyszerű és hatékony módszer, ha az adatai már sorok listájaként vannak strukturálva, például amikor egy olyan fájlformátumból olvas be, amelynek nincsenek fejlécei.
Haladó inicializálás: DataFrame testreszabása
A nyers adatok biztosĂtásán tĂşl a pd.DataFrame() konstruktor számos paramĂ©tert kĂnál az Ăşj DataFrame struktĂşrájának Ă©s tulajdonságainak szabályozására a lĂ©trehozás pillanatátĂłl kezdve.
Az index megadása
Már láttuk az `index` paramĂ©tert működĂ©s közben. Az index a DataFrame kulcsfontosságĂş rĂ©sze, amely cĂmkĂ©ket biztosĂt a sorokhoz, Ă©s gyors keresĂ©sekhez, adatok illesztĂ©sĂ©hez Ă©s sok máshoz használhatĂł. Bár a Pandas alapĂ©rtelmezett numerikus indexet (0, 1, 2, ...) biztosĂt, egy Ă©rtelmes index beállĂtása sokkal könnyebbĂ© teheti az adatokkal valĂł munkát.
PĂ©lda: Használjuk Ăşjra a listák szĂłtárábĂłl kĂ©szĂĽlt pĂ©ldánkat, de a `City` oszlopot állĂtsuk be indexkĂ©nt a lĂ©trehozáskor.
city_data = {
'Country': ['Japan', 'India', 'China', 'Brazil', 'India'],
'Population_Millions': [37.3, 32.0, 28.5, 22.4, 20.9],
'Is_Coastal': [True, False, True, False, True]
}
city_names = ['Tokyo', 'Delhi', 'Shanghai', 'SĂŁo Paulo', 'Mumbai']
# Create the DataFrame with a custom index
df_with_index = pd.DataFrame(city_data, index=city_names)
print(df_with_index)
Kimenet:
Country Population_Millions Is_Coastal
Tokyo Japan 37.3 True
Delhi India 32.0 False
Shanghai China 28.5 True
SĂŁo Paulo Brazil 22.4 False
Mumbai India 20.9 True
MostantĂłl ezekkel az Ă©rtelmes cĂmkĂ©kkel Ă©rheti el a sori adatokat, pĂ©ldául a df_with_index.loc['Tokyo'] paranccsal.
AdattĂpusok szabályozása (`dtype`)
A Pandas elĂ©g jĂłl megállapĂtja az adattĂpusokat (pl. felismeri a számokat, szövegeket Ă©s logikai Ă©rtĂ©keket). Azonban nĂ©ha egy oszlophoz meghatározott adattĂpust kell kĂ©nyszerĂteni a memĂłriahatĂ©konyság biztosĂtása vagy speciális műveletek engedĂ©lyezĂ©se Ă©rdekĂ©ben. A `dtype` paramĂ©ter biztosĂtja ezt a vezĂ©rlĂ©st.
PĂ©lda: KĂ©pzelje el, hogy vannak termĂ©kazonosĂtĂłink, amelyek számoknak tűnnek, de szövegkĂ©nt (stringkĂ©nt) kell kezelni Ĺ‘ket.
data = {
'ProductID': [101, 102, 103],
'Stock': [50, 75, 0]
}
# Create DataFrame while specifying a dtype for 'ProductID'
df_types = pd.DataFrame(data, dtype={'ProductID': str, 'Stock': 'int32'})
print(df_types.dtypes)
Kimenet:
ProductID object Stock int32 dtype: object
Figyelje meg, hogy a Pandasban a `str` `object` kĂ©nt jelenik meg. Az `dtype` explicit beállĂtásával megakadályozzuk, hogy a Pandas a `ProductID`-t számkĂ©nt kezelje, ami hibás számĂtásokhoz vagy rendezĂ©si problĂ©mákhoz vezethet. Specifikusabb egĂ©sz szám tĂpusok, mint az `int32` használata az alapĂ©rtelmezett `int64` helyett, jelentĹ‘s memĂłriát takarĂthat meg nagy adathalmazok esetĂ©n.
Gyakorlati forgatókönyvek és bevált módszerek
A megfelelő létrehozási módszer kiválasztása az adatok eredeti formátumától függ. Íme egy egyszerű döntési útmutató:
- Oszlopokban vannak az adatai (pl. egy lista funkciónként)? Használjon listák szótárát. Ez természetes illeszkedés.
- Az adatai rekordok sorozatát képezik (pl. egy JSON API-ból)? Használjon szótárak listáját. Kiválóan kezeli a hiányzó vagy extra mezőket a rekordokban.
- Az adatai numerikusak Ă©s rácsban vannak (pl. tudományos számĂtásbĂłl)? Használjon NumPy tömböt. Ez a legperformánsabb opciĂł ehhez a felhasználási esethez.
- Az adatai egyszerű, soronkénti táblázatos formátumban vannak fejlécek nélkül? Használjon listák listáját és adja meg az oszlopneveket külön.
Kerülendő gyakori hibák
- Nem egyenlő hosszúságú listák a szótárban: Ez gyakori hiba. Amikor listák szótárából hoz létre DataFrame-et, minden listának pontosan ugyanannyi elemet kell tartalmaznia. Ha nem, a Pandas `ValueError`-t fog dobni. Mindig győződjön meg arról, hogy az oszlopadatai azonos hosszúságúak a létrehozás előtt.
- Az index figyelmen kĂvĂĽl hagyása: Az alapĂ©rtelmezett, 0-tĂłl indulĂł indexre támaszkodás sok esetben rendben van, de ha az adatai termĂ©szetes azonosĂtĂłval rendelkeznek (pĂ©ldául termĂ©kazonosĂtĂł, felhasználĂłi azonosĂtĂł vagy specifikus idĹ‘bĂ©lyeg), akkor annak indexkĂ©nt valĂł beállĂtása a kezdetektĹ‘l egyszerűsĂtheti a kĂłdját kĂ©sĹ‘bb.
- AdattĂpusok elfelejtĂ©se: Bár a Pandas az esetek többsĂ©gĂ©ben jĂłl kikövetkezteti a tĂpusokat, nagy adathalmazok vagy vegyes tĂpusĂş oszlopok esetĂ©n a teljesĂtmĂ©ny romolhat. Legyen proaktĂv az `dtype` beállĂtásában azoknál az oszlopoknál, amelyeket kategĂłriákkĂ©nt, stringkĂ©nt vagy specifikus numerikus tĂpusokkĂ©nt kell kezelni, hogy memĂłriát takarĂtson meg Ă©s elkerĂĽlje a hibákat.
Inicializáción túl: DataFrame-ek létrehozása fájlokból
Bár ez az ĂştmutatĂł a memĂłriában lĂ©vĹ‘ Python objektumokbĂłl törtĂ©nĹ‘ DataFrame-ek lĂ©trehozására összpontosĂt, kulcsfontosságĂş tudni, hogy a valĂłs forgatĂłkönyvek többsĂ©gĂ©ben az adatai kĂĽlsĹ‘ fájlbĂłl származnak majd. A Pandas rendkĂvĂĽl optimalizált olvasĂłfĂĽggvĂ©nyek kĂ©szletĂ©t biztosĂtja erre a cĂ©lra, többek között:
pd.read_csv(): A vesszővel elválasztott értékek fájljaihoz, az adatimportálás igáslova.pd.read_excel(): Adatok olvasására Microsoft Excel táblázatokból.pd.read_json(): Adatok olvasására JSON fájlokból vagy stringekből.pd.read_sql(): Adatbázis-lekérdezés eredményeinek közvetlen beolvasására DataFrame-be.pd.read_parquet(): Olvasáshoz a hatékony, oszloporientált Parquet fájlformátumból.
Ezek a fĂĽggvĂ©nyek a következĹ‘ logikus lĂ©pĂ©s a Pandas-utazásában. Az elsajátĂtásuk lehetĹ‘vĂ© teszi, hogy gyakorlatilag bármilyen forrásbĂłl adatokat importáljon egy hatĂ©kony DataFrame struktĂşrába.
Ă–sszefoglalás: Az adatok elsajátĂtásának alapja
A Pandas DataFrame a központi adatstruktĂşra minden komoly Python adatfeldolgozáshoz. Mint láthattuk, a Pandas rugalmas Ă©s intuitĂv eszközöket kĂnál ezen struktĂşrák inicializálásához számos kĂĽlönbözĹ‘ formátumbĂłl. Azzal, hogy megĂ©rti, hogyan hozhat lĂ©tre DataFrame-et szĂłtárakbĂłl, listákbĂłl Ă©s NumPy tömbökbĹ‘l, szilárd alapot Ă©pĂtett adatelemzĂ©si projektjeihez.
A kulcs az, hogy kiválassza azt a mĂłdszert, amely a legjobban illeszkedik az adatok eredeti struktĂşrájához. Ez nemcsak tisztábbá Ă©s olvashatĂłbbá, hanem hatĂ©konyabbá is teszi a kĂłdját. Innen kĂ©szen áll arra, hogy továbblĂ©pjen az adat tisztĂtás, feltárás, átalakĂtás Ă©s vizualizáciĂł izgalmas feladataira. JĂł kĂłdolást!